package com.siwei.mes.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * @author chenmaolin
 * @version 1.0
 * @date 2021/9/28
 * @Description json
 */
@Slf4j
public class JsonUtils {

    /**
     * JSON 转 POJO
     */
    public static <T> T getObject(String pojo, Class<T> tclass) {
        try {
            return JSONObject.parseObject(pojo, tclass);
        } catch (Exception e) {
            log.error(tclass + "转 JSON 失败");
        }
        return null;
    }

    /**
     * JSONObject 转 POJO
     */
    public static <T> T getObject(JSONObject jsonObject, Class<T> tclass) {
        try {
            String pojo = JSON.toJSONString(jsonObject);
            return getObject(pojo, tclass);
        } catch (Exception e) {
            log.error(tclass + "转 JSON 失败");
        }
        return null;
    }

    /**
     * POJO 转 JSON
     */
    public static <T> String getJson(T tResponse) {
        return JSONObject.toJSONString(tResponse);
    }

    /**
     * List<T> 转 json 保存到数据库
     */
    public static <T> String listToJson(List<T> ts) {
        return JSON.toJSONString(ts);
    }

    /**
     * json 转 List<T>
     */
    public static <T> List<T> jsonToList(String jsonString, Class<T> clazz) {
        @SuppressWarnings("unchecked")
        List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz);
        return ts;
    }

    /**
     * jsonArray 转 List<T>
     */
    public static <T> List<T> jsonToList(JSONArray jsonArray, Class<T> clazz) {
        @SuppressWarnings("unchecked")
        String jsonString = JSON.toJSONString(jsonArray);
        List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz);
        return ts;
    }

    /**
     * 对象转JSONObject
     *
     * @param tResponse
     * @return
     */
    public static <T> JSONObject beanToObject(T tResponse) {
        try {
            Object json = JSON.toJSON(tResponse);
            return (JSONObject) json;
        } catch (Exception e) {
            log.info("对象转成JSONObject失败返回null");
            return null;
        }
    }


    public static void main(String[] args) throws JSONException {
        // 创建第一个JsonObject对象
        JSONObject json1 = new JSONObject();
        json1.put("name", "John");
        json1.put("age", 25);

        // 创建第二个JsonObject对象
        JSONObject json2 = new JSONObject();
        json2.put("city", "New York");
        json2.put("country", "USA");

        // 将两个JsonObject对象合并为一个新的JsonObject对象
        JSONObject mergedJson = mergeJsonObjects(json1, json2);

        System.out.println(mergedJson.toString());
    }

    /**
     * 两个jsonObject合并  obj1为主  合并obj2
     *
     * @param obj1
     * @param obj2
     * @return
     */
    public static JSONObject mergeJsonObjects(JSONObject obj1, JSONObject obj2) {
        if (obj2 == null) {
            return obj1;
        }
        JSONObject mergedJson = (JSONObject) obj1.clone();
        mergedJson.putAll(obj2);
        return mergedJson;
    }

    /**
     * 判断是否为json字符串
     *
     * @param content
     * @return
     */
    public static boolean isJSONString(String content) {
        if (StringUtils.isEmpty(content)) {
            return false;
        }
        if (!content.startsWith("{") || !content.endsWith("}")) {
            return false;
        }
        try {
            JSONObject.parse(content);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
